package com.redepronik.negosys.seguridad.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import com.redepronik.negosys.rrhh.entity.Persona;

/**
 * The persistent class for the usuario database table.
 * 
 */
@Entity
@Table(schema = "seguridad", name = "usuario")
@NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u")
public class Usuario implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(allocationSize = 1, name = "USUARIO_USUARIOID_GENERATOR", sequenceName = "SEGURIDAD.USUARIO_USUARIOID_SEQ")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USUARIO_USUARIOID_GENERATOR")
	@Column(unique = true, nullable = false)
	private Integer usuarioid;

	@Column(nullable = false)
	private Boolean enabled;

	@Column(nullable = false, length = 13)
	private String login;

	@Column(nullable = false, length = 50)
	private String nombre;

	@Column(nullable = false, length = 255)
	private String password;

	// bi-directional many-to-one association to Persona
	@OneToOne
	@JoinColumn(name = "personaid", nullable = false)
	private Persona persona;

	// bi-directional many-to-one association to Bitacora
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "usuario")
	private List<Bitacora> bitacoras;

	// bi-directional many-to-one association to Grupousuario
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "usuario")
	private List<Grupousuario> grupousuarios;

	// bi-directional many-to-one association to Rolusuario
	@OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, mappedBy = "usuario")
	private List<Rolusuario> rolusuarios;

	public Usuario() {
	}

	public Bitacora addBitacora(Bitacora bitacora) {
		getBitacoras().add(bitacora);
		bitacora.setUsuario(this);

		return bitacora;
	}

	public Grupousuario addGrupousuario(Grupousuario grupousuario) {
		getGrupousuarios().add(grupousuario);
		grupousuario.setUsuario(this);

		return grupousuario;
	}

	public Rolusuario addRolusuario(Rolusuario rolusuario) {
		getRolusuarios().add(rolusuario);
		rolusuario.setUsuario(this);

		return rolusuario;
	}

	public List<Bitacora> getBitacoras() {
		return this.bitacoras;
	}

	public Boolean getEnabled() {
		return this.enabled;
	}

	public List<Grupousuario> getGrupousuarios() {
		return this.grupousuarios;
	}

	public String getLogin() {
		return this.login;
	}

	public String getNombre() {
		return this.nombre;
	}

	public String getPassword() {
		return this.password;
	}

	public Persona getPersona() {
		return this.persona;
	}

	public List<Rolusuario> getRolusuarios() {
		return this.rolusuarios;
	}

	public Integer getUsuarioid() {
		return this.usuarioid;
	}

	public Bitacora removeBitacora(Bitacora bitacora) {
		getBitacoras().remove(bitacora);
		bitacora.setUsuario(null);

		return bitacora;
	}

	public Grupousuario removeGrupousuario(Grupousuario grupousuario) {
		getGrupousuarios().remove(grupousuario);
		grupousuario.setUsuario(null);

		return grupousuario;
	}

	public Rolusuario removeRolusuario(Rolusuario rolusuario) {
		getRolusuarios().remove(rolusuario);
		rolusuario.setUsuario(null);

		return rolusuario;
	}

	public void setBitacoras(List<Bitacora> bitacoras) {
		this.bitacoras = bitacoras;
	}

	public void setEnabled(Boolean enabled) {
		this.enabled = enabled;
	}

	public void setGrupousuarios(List<Grupousuario> grupousuarios) {
		this.grupousuarios = grupousuarios;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	public void setRolusuarios(List<Rolusuario> rolusuarios) {
		this.rolusuarios = rolusuarios;
	}

	public void setUsuarioid(Integer usuarioid) {
		this.usuarioid = usuarioid;
	}

}